package lion.framework.core.db.datasource;

import java.util.UUID;

import javax.sql.DataSource;

import org.logicalcobwebs.proxool.ProxoolDataSource;

import lion.dev.lang.MapJ;
import lion.framework.core.db.DataSourceManager;
import lion.framework.core.db.anno.DataSourceProvider;

/**
 * Proxool连接池提供者<br/>
 * 特殊配置：<br/>
 * 1、activetime：MaximumActiveTime 一个连接最长连接时间，当有长事务连接时，增大该值，默认300000毫秒,即5分钟<b/>
 * 2、alias:proxool的alias属性
 *
 * <pre>
 * time   2013年8月6日
 * mail   hl_0074@sina.com
 * </pre>
 *
 * @author lion
 */
@DataSourceProvider("proxool")
public class ProxoolDataSourceProvider implements IDataSourceProvider {

	private MapJ config;

	public ProxoolDataSourceProvider(MapJ config) {

		this.config = config;
	}

	@Override
	public DataSource getDataSource() {

		ProxoolDataSource pds = new ProxoolDataSource();
		pds.setUser(config.getString("user"));
		pds.setPassword(config.getString("password"));
		pds.setDriverUrl(String.format(DataSourceManager.getDriverURLTemplate(config.getString("type", "mysql")),
				config.getString("server", "localhost"),
				config.getInt("port", 3306), config.getString("db")));

		pds.setDriver(DataSourceManager.getJDBCDriver(config.getString("type")));
		pds.setMinimumConnectionCount(config.getInt("init", 10));
		pds.setMaximumConnectionCount(config.getInt("max", 100));
		pds.setMaximumActiveTime(config.getInt("activetime", 300000)); // 采用默认5分钟

		pds.setPrototypeCount(config.getInt("init", 10));
		pds.setSimultaneousBuildThrottle(200);
		pds.setAlias(config.getString("alias", UUID.randomUUID().toString().replace("-", "")));

		pds.setHouseKeepingTestSql("SELECT CURRENT_TIME()");

		return pds;
	}
}
